package com.ptv.backupmaterias;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

import android.app.ProgressDialog;
import android.content.Context;
import android.database.Cursor;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;

import com.ptv.database.MateriasBDAdapter;

public class ExportarMateriaBDFileTask  extends AsyncTask<String, Void, Boolean> {

    private final ProgressDialog dialogo;
    private Context contexto;
    private MateriasBDAdapter bdAdapter;
    private Cursor mCursor;
    private String mensajeExportando,errorExportando,errorEscrituraAccesoFicheros,exportacionOK;
    
    public ExportarMateriaBDFileTask (Context contexto, MateriasBDAdapter bdAdapter,String mensajeExportando,String errorExportando,
    		String errorEscrituraAccesoFicheros,String exportacionOK){
        dialogo = new ProgressDialog(contexto);
        this.contexto=contexto;
        this.bdAdapter= bdAdapter;
        this.mensajeExportando = mensajeExportando;
        this.errorExportando = errorExportando;
        this.errorEscrituraAccesoFicheros = errorEscrituraAccesoFicheros;
        this.exportacionOK =exportacionOK;
    }
    
    protected void onPreExecute() {
        this.dialogo.setMessage(mensajeExportando);
        mCursor = bdAdapter.obteneMateriasBackup();
        this.dialogo.show();
    }    
    
    protected Boolean doInBackground(final String... args) {

        File dir = android.os.Environment.getExternalStorageDirectory();
        File exportDir = new File(dir, "BackupTeachAClass");
        if (!exportDir.exists()) {
            exportDir.mkdirs();
        }

        String dirAlmacExt=exportDir.getAbsolutePath();
        try
        {
            File fichero = new File(dirAlmacExt, "copia_seguridad_materias.csv");
            OutputStreamWriter fout = new OutputStreamWriter(new FileOutputStream(fichero));

            int numcols = mCursor.getColumnCount();
            String auxStr="";
            for( int idx = 0; idx < numcols; idx++ )
            {
                auxStr+=mCursor.getColumnName(idx)+";";
            }
            fout.write(auxStr + "\n");
            mCursor.moveToFirst();
            while (mCursor.getPosition() < mCursor.getCount()) {
                auxStr="";
                for( int idx = 0; idx < numcols; idx++ ){
                	if (mCursor.getString(idx) == null || mCursor.getString(idx).isEmpty())
                		auxStr += "#;";
                	else auxStr += mCursor.getString(idx)+ ";";
                }
                fout.write(auxStr + "\n");
                mCursor.moveToNext();
            }
            fout.close();
            return true;
        }
        catch (Exception ex)
        {
            Log.e("Ficheros", errorEscrituraAccesoFicheros);
            return false;
        }
    }

    protected void onPostExecute(final Boolean success) {
        if (this.dialogo.isShowing()) {
            this.dialogo.dismiss();
        }
        if (success) {
            Toast.makeText(contexto, exportacionOK, Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(contexto, errorExportando, Toast.LENGTH_SHORT).show();
        }
    }    
}
